home *** CD-ROM | disk | FTP | other *** search
/ PCMania 81 / PCMania CD81_1.iso / PCMANIA / projue81 / Borland / 081pjw_1.c next >
C/C++ Source or Header  |  1999-05-30  |  6KB  |  257 lines

  1. /****************************************************\
  2. *   081PJW_1.C                                       *
  3. *   Archivo con las funciones obligatorias              *
  4. *   UN RELOJ                                         *
  5. *   I±aki Otero. Villanueva de la Ca±ada, 1999.      *
  6. \****************************************************/
  7.  
  8. #define STRICT
  9. #include "081PJW_1.H"
  10.  
  11. /*-------------------------- HANDLES Y VARIABLES ---*/
  12.  
  13. char Aplicacion[] = "RELOJ" ;
  14. int  iDate,     iTime ;
  15. char sDate[2], sTime[2], ampm[2][5] ;
  16.  
  17. /*--------------- FUNCION PRINCIPAL DEL PROGRAMA ---*/
  18.  
  19. #pragma argsused
  20.  
  21. int WINAPI WinMain(HINSTANCE hInstance,
  22.                          HINSTANCE hPrevInstance,
  23.                          LPSTR lpCmdLine,
  24.                    int nCmdShow)
  25. {
  26.     MSG msg ;
  27.    HWND hwnd ;
  28.    WNDCLASSEX wcx ;
  29.  
  30.      wcx.cbSize= sizeof(WNDCLASSEX) ;
  31.     wcx.style = CS_HREDRAW | CS_VREDRAW;
  32.     wcx.lpfnWndProc = WinProc ;
  33.     wcx.cbClsExtra = 0 ;
  34.    wcx.cbWndExtra = 0 ;
  35.     wcx.hInstance = hInstance ;
  36.     wcx.hIcon = NULL ;
  37.     wcx.hCursor = LoadCursor(NULL, IDC_ARROW) ;
  38.    wcx.hbrBackground = (HBRUSH)
  39.                                   GetStockObject(LTGRAY_BRUSH);
  40.    wcx.lpszMenuName  = NULL ;
  41.     wcx.lpszClassName = Aplicacion ;
  42.    wcx.hIconSm = NULL ;
  43.  
  44.    if(!RegisterClassEx(&wcx)) return(FALSE) ;
  45.  
  46.     hwnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
  47.                                Aplicacion, Aplicacion,
  48.                                 WS_OVERLAPPEDWINDOW,
  49.                         64, 64, 128, 128,
  50.                                 NULL, NULL, hInstance,     NULL);
  51.  
  52.     if(!hwnd) return(FALSE) ;
  53.  
  54.     ShowWindow(hwnd, nCmdShow) ;
  55.    UpdateWindow(hwnd) ;
  56.  
  57.    while(GetMessage(&msg, NULL, 0, 0))
  58.     {
  59.           TranslateMessage(&msg) ;
  60.       DispatchMessage(&msg) ;
  61.  
  62.     }
  63.    return(msg.wParam) ;
  64. }
  65.  
  66. /*--------- FUNCION DEL PROCEDIMIENTO DE VENTANA ---*/
  67.  
  68. long CALLBACK WinProc(HWND hwnd, UINT message,
  69.                              WPARAM wParam, LPARAM lParam)
  70. {
  71.    HDC hdc ;
  72.    PAINTSTRUCT ps ;
  73.  
  74.     switch(message)
  75.     {
  76.         case WM_CREATE :
  77.  
  78.          // Ponemos en marcha el cron≤metro
  79.             SetTimer(hwnd, 1, 1000, NULL) ;
  80.  
  81.          // Tomamos los datos de Win.ini
  82.           TomarDatos() ;
  83.  
  84.             // Pintamos el fondo de la ventana
  85.             SetClassLong(hwnd, GCL_HBRBACKGROUND,
  86.                                 GetSysColor(COLOR_3DFACE)) ;
  87.  
  88.          return 0 ;
  89.  
  90.         case WM_TIMER :
  91.  
  92.             // Repintamos sobre la ventana sin borrarla
  93.          // para evitar parpadeos molestos
  94.           InvalidateRect (hwnd, NULL, FALSE) ;
  95.  
  96.          return 0 ;
  97.  
  98.         // Se ha modificado WIN.INI
  99.       case WM_WININICHANGE :
  100.  
  101.          // Tomamos los datos de Win.ini
  102.          TomarDatos() ;
  103.  
  104.             // Borramos el fondo de la ventana antes
  105.          // de repintar
  106.             InvalidateRect(hwnd, NULL, TRUE) ;
  107.  
  108.             return 0 ;
  109.  
  110.         // Repintado de la ventana
  111.       case WM_PAINT:
  112.  
  113.           hdc = BeginPaint(hwnd, &ps) ;
  114.  
  115.             // Actualizamos el reloj
  116.             Actualizar(hdc) ;
  117.  
  118.             EndPaint(hwnd, &ps) ;
  119.  
  120.             return 0 ;
  121.  
  122.       // Tomamos los datos de Win.ini
  123.       case WM_DESTROY:
  124.  
  125.             // Destruimos el cron≤metro
  126.          KillTimer (hwnd, 1) ;
  127.  
  128.           PostQuitMessage(0) ;
  129.  
  130.             return 0 ;
  131.  
  132.       default:
  133.  
  134.              return DefWindowProc(hwnd, message,
  135.                                      wParam, lParam) ;
  136.     }
  137. }
  138.  
  139. /*-------- FUNCION QUE TOMA LOS DATOS DE WIN.INI ---*/
  140.  
  141. void TomarDatos(void)
  142. {
  143.     iDate = GetProfileInt("intl","iDate",0) ;
  144.    iTime = GetProfileInt("intl","iTime",0) ;
  145.  
  146.    GetProfileString("intl","sDate","/",sDate,2) ;
  147.    GetProfileString("intl","sTime",":",sTime,2) ;
  148.    GetProfileString("intl","s1159","a.m.",ampm[0],5) ;
  149.    GetProfileString("intl","s2359","p.m.",ampm[1],5) ;
  150.  }
  151.  
  152. /*------ FUNCION QUE DIBUJA Y ACTUALIZA EL RELOJ ---*/
  153.  
  154. void Actualizar(HDC hdc)
  155. {
  156.    char        cCadena[64] ;
  157.    struct tm * datos ;
  158.    time_t      ahora ;
  159.  
  160.     // Tomamos datos
  161.    time(&ahora) ;
  162.  
  163.     // Rellenamos la estructura
  164.    datos = localtime(&ahora) ;
  165.  
  166.    // Rellenamos la cadena del mensaje datos de hora
  167.     if(iTime == 1)
  168.    {
  169.        wsprintf(cCadena, " %02d%s%02d%s%02d ",
  170.                   (datos->tm_hour),
  171.                  sTime, (datos->tm_min),
  172.                   sTime, (datos->tm_sec)) ;
  173.     }
  174.    else
  175.    {
  176.        wsprintf(cCadena, " %d%s%02d%s%02d %s ",
  177.                     ((datos->tm_hour) % 12) ?
  178.                   ((datos->tm_hour) % 12) : 12,
  179.                   sTime, (datos->tm_min),
  180.                   sTime, (datos->tm_sec),
  181.                   ampm[(datos->tm_hour) / 12]) ;
  182.     }
  183.  
  184.     // Color del fondo
  185.     SetBkColor(hdc, GetSysColor(COLOR_3DFACE));
  186.  
  187.     // Color del texto -> Rojo
  188.    SetTextColor(hdc, RGB(255,   0,   0)) ;
  189.  
  190.     // Exhibimos el mensaje
  191.     TextOut(hdc, 25, 15, cCadena, strlen(cCadena)) ;
  192.  
  193.    // Rellenamos la cadena del mensaje datos de fecha
  194.     wsprintf(cCadena, " %d%s%02d%s%02d ",
  195.        iDate == 1 ? (datos->tm_mday) :
  196.       iDate == 2 ? (datos->tm_year % 100) :
  197.       (datos->tm_mon + 1),
  198.       sDate,
  199.       iDate == 1 ? (datos->tm_mon + 1) :
  200.       iDate == 2 ? (datos->tm_mon + 1) :
  201.       (datos->tm_mday),
  202.       sDate,
  203.       iDate == 1 ? (datos->tm_year % 100) :
  204.       iDate == 2 ? (datos->tm_mday) :
  205.       (datos->tm_year % 100)) ;
  206.  
  207.     // Exhibimos el mensaje
  208.     TextOut(hdc, 25, 40, cCadena, strlen(cCadena)) ;
  209.  
  210.     // Dφa de la semana
  211.    switch(datos->tm_wday)
  212.    {
  213.        case 1:
  214.  
  215.             strcpy(cCadena, " Lunes ") ;
  216.           break ;
  217.  
  218.        case 2:
  219.  
  220.             strcpy(cCadena, " Martes ") ;
  221.           break ;
  222.  
  223.        case 3:
  224.  
  225.             strcpy(cCadena, " MiΘrcoles ") ;
  226.           break ;
  227.  
  228.        case 4:
  229.  
  230.             strcpy(cCadena, " Jueves ") ;
  231.           break ;
  232.  
  233.        case 5:
  234.  
  235.             strcpy(cCadena, " Viernes ") ;
  236.           break ;
  237.  
  238.        case 6:
  239.  
  240.             strcpy(cCadena, " Sßbado ") ;
  241.           break ;
  242.  
  243.        default:
  244.  
  245.             strcpy(cCadena, " Domingo ") ;
  246.           break ;
  247.    }
  248.  
  249.     // Exhibimos el mensaje
  250.     TextOut(hdc, 25, 65, cCadena, strlen(cCadena)) ;
  251.  
  252. }
  253.  
  254. /*------------------------------ FIN DEL ARCHIVO ---*/
  255.  
  256.  
  257.